#ifndef ESTRATEGIARECURSO_H_
#define ESTRATEGIARECURSO_H_

#include "../Constantes.h"
#include "../Bytes.h"

class Archivo;

/*
 * Funcion: se encarga de la administracion de los distintos tipos de
 * almacenamiento.
 */
class EstrategiaRecurso {

protected:
	Archivo* archivo;

public:
	/*
	 * Pre: -
	 * Pos: crea una nueva instancia.
	 */
	EstrategiaRecurso(Archivo* archivo);

	/*
	 * Pre: -
	 * Pos: libera los recursos instanciados.
	 */
	virtual ~EstrategiaRecurso();

	/*
	 * Pre: offset valido.
	 * Pos: escribe los bytes en el archivo.
	 */
	virtual void escribir(const Bytes& bytes, offset offset) = 0;

	/*
	 * Pre: -
	 * Pos: lee los bytes.
	 */
	virtual Bytes leer(offset offset, cantBytes cantBytes) = 0;

	/*
	 * Pre: -
	 * Pos: devuelve el tamanio del archivo.
	 */
	offset getTamanioArchivo();

	/*
	 * Pre: -
	 * Pos: devuelve el path del archivo.
	 */

	string getPath();

	bool setTamanioArchivo(cantBytes nuevo);

	virtual void imprimirBuffer();

};

#endif /* ESTRATEGIARECURSO_H_ */
